package com.qingzhuge.manager.service;


import com.qingzhuge.manager.dto.AdminLoginDto;
import com.qingzhuge.manager.dto.AdminRegDto;
import com.qingzhuge.manager.dto.SecurityUser;
import com.qingzhuge.manager.entity.SysUser;
import com.qingzhuge.resource.entity.SysResource;
import com.qingzhuge.service.IBasePkLongService;

import java.util.Collection;
import java.util.List;

/**
 * @author : zero.xiao
 * @description : 系统用户
 * @date :2018/6/8 0008 下午 15:06
 * @modified :
 * @since : 1.0.0
 */
public interface ISysUserService extends IBasePkLongService<SysUser> {
    /**
     * 密码加密
     * @param password 明文密码
     * @return 密文密码
     */
    String encodePassword(String password);

    boolean matchesPassword(String pawPassword, String encodePassword);

    SecurityUser createUserDetails(SysUser user);
    /**
     * 按用户名查询
     *
     * @param username 用户名
     * @return 用户
     */
    SysUser findByUsername(String username);

    SysUser findByMobile(String phone);

    List<String> queryRolePermission(Long roleId);


    /**
     * 按用户id获取权限
     *
     * @param userId 用户id
     * @return 权限数组
     */
    List<String> queryUserPermission(Long userId);

    SysUser findByRoot();

    List<SysUser> findListByRoot(boolean root);

    /**
     * 系统中后台用户数量，排队root用户
     *
     * @return 用户数量
     */
    int countByRootFalse();

    SysUser findByUsernameOrPhone(String account);

    /**
     * 修改密码
     * @param userId      用户ID
     * @param password    原密码
     * @param newPassword 新密码
     */
    void updatePassword(Long userId, String password, String newPassword);

    Collection<SysResource> queryResourceByUid(Long userId);

    /**
     * 注册
     */
    SysUser register(AdminRegDto register);

    /**
     * 登录
     */
    SysUser login(AdminLoginDto register);

    /**
     * 重置密码
     */
    boolean resetPwd(AdminRegDto reset);

    /**
     * 按部门id查找用户
     * @param deptId 部门id
     * @return 用户
     */
    List<SysUser> findListByDept(Long deptId);
}
